package com.databaseconnectionmobilapi.service;

import com.databaseconnectionmobilapi.domain.dto.*;
import com.databaseconnectionmobilapi.domain.entity.DatabaseEntity;
import com.baomidou.mybatisplus.extension.service.IService;
import com.databaseconnectionmobilapi.util.result.RestResult;

import java.sql.SQLException;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author fall
 * @since 2022-01-17
 */
public interface ConnectionDbService extends IService<DatabaseEntity> {
    /**
     * 增加MySQL数据库连接
     * @param userId
     * @param addMysqlConnectionDTO
     * @return
     */
    RestResult addMysqlConnection(Integer userId, AddMysqlConnectionDTO addMysqlConnectionDTO);

    /**
     * 查看所有连接
     * @param token
     * @param selectAllConnectionDTO
     * @return
     */
    RestResult selectAllConnection(String token, SelectAllConnectionDTO selectAllConnectionDTO);

    /**
     * 查看单个连接
     * @param selectConnectionDTO
     * @return
     */
    RestResult selectConnection(SelectConnectionDTO selectConnectionDTO);

    /**
     * 增加链接
     * @param token
     * @param addConnectionDTO
     * @return
     */
    RestResult addConnection(String token, AddConnectionDTO addConnectionDTO);

    /**
     * 删除链接
     * @param delConnectionDTO
     * @return
     */
    RestResult delConnection(DelConnectionDTO delConnectionDTO);

    /**
     * 删除链接
     * @param deleteConnectionDTO
     * @return
     */
    RestResult deleteConnection(DeleteConnectionDTO deleteConnectionDTO);

    /**
     * 关闭链接
     * @param closeConnectionDTO
     * @return
     */
    RestResult closeConnection(CloseConnectionDTO closeConnectionDTO);

    /**
     * 查看一个数据库中所有的表
     * @param selectAllTableDTO
     * @return
     */
    RestResult selectAllTable(SelectAllTableDTO selectAllTableDTO);

    /**
     * 查看表中所有数据
     * @param selectTableDTO
     * @return
     */
    RestResult selectTable(SelectTableDTO selectTableDTO);

    /**
     * 查看所有字符集
     * @param selectAllCharsetDTO
     * @return
     */
    RestResult selectAllCharset(SelectAllCharsetDTO selectAllCharsetDTO);

    /**
     * 查看某个字符集下所有的排序规则
     * @param selectAllCollationDTO
     * @return
     */
    RestResult selectAllCollation(SelectAllCollationDTO selectAllCollationDTO);

    /**
     * 创建数据库
     * @param createDbDTO
     * @throws SQLException
     * @return
     */
    RestResult createDb(CreateDbDTO createDbDTO) throws SQLException;

    /**
     * 删除数据库
     * @param deleteDbDTO
     * @return
     * @throws SQLException
     */
    RestResult deleteDb(DeleteDbDTO deleteDbDTO) throws SQLException;

    /**
     * 更新数据库
     * @param updateDbDTO
     * @return
     * @throws SQLException
     */
    RestResult updateDb(UpdateDbDTO updateDbDTO) throws SQLException;

    /**
     * 查看表结构
     * @param selectTableStructDTO
     * @return
     */
    RestResult selectTableStruct(SelectTableStructDTO selectTableStructDTO);

    /**
     * 创建表
     * @param createTableDTO
     * @return
     */
    RestResult createTable(CreateTableDTO createTableDTO);

    /**
     * 增加数据
     * @param addDataDTO
     * @return
     */
    RestResult addData(AddDataDTO addDataDTO);

    /**
     * 测试连接
     * @param testConnectionDTO
     * @return
     */
    RestResult testConnection(TestConnectionDTO testConnectionDTO);
}
